#pragma once
#include "Executable.h"
#include <list>
#include "Shader.h"

class Program :
	public Executable
{
protected:
	std::list<GLuint> shaders;

	void DetachShaders();
public:
	Program();
	virtual ~Program();

	virtual void Bind() override; // it's actually a link
	virtual GLuint GetType() const override;

	void Use();
	void UnUse();

	virtual void Unbind() override; // same as UnUse

	void Attach(const Shader& shader);

	virtual bool GetStatus() const override;
	virtual const char* GetStatusMessage() override;
};

